feat(mobile): add session goal section and /goal composer support - #6117
Conversation
Code Review SummaryStatus: No Issues Found | Recommendation: Merge Executive SummaryIncremental review of the follow-up change adding Files Reviewed (2 files)
Previous Review Summary (commit 38bf538)Current summary above is authoritative. Previous snapshots are kept for context only. Previous review (commit 38bf538)Status: No Issues Found | Recommendation: Merge Executive SummaryReviewed the mobile session-goal section, Files Reviewed (113 files)
No potential memory leaks were introduced: the changes are pure projection/state updates with no new subscriptions, timers, or listeners. Reviewed by deepseek-v4.1-flash · Input: 0 · Output: 0 · Cached: 0 Review guidance: REVIEW.md from base branch |
38bf538 to
8a1c6b5
Compare
Changelog for users
/goal <objective>; Pause, Resume, and Remove forward/goal pause,/goal resume, and/goal clear./goalwith no argument starts a goal compose mode; the next send forwards/goal <objective>.goalshows the upgrade message instead of sending chat.Changelog for maintainers
SessionInfogains an optionalgoal;SessionGoalandSessionGoalStatusare exported from@kilocode/cloud-agent-sdk.projectSessionGoalvalidatesmetadata['kilo.goal'](and a nestedkilo.goal), drops malformed values without throwing, and is exported.sessionMetadataon the initial page only, best-effort andnullwhen the snapshot read fails.cliSessionsV2.getSessionMessagesPageprojects the goal and strips the raw metadata so onlysessionGoalreaches the client.info, so asession.createdreplay cannot drop the fixed row.agentChat.goalkeys are added to the English catalog and every translated catalog.chat-composer-slash-commands.ts,session-goal-actions.ts, andnormalizer.tsfirst; the fail-closed and read-only paths plus clearing a pending question or permission around pause, resume, and edit are the risky parts.E2E proof
Recording of the verified flow (waits trimmed)
p4-scroll.mp4.trim.mp4
Recording of the verified flow (waits trimmed)
p2-run.mp4.trim.mp4
Recording of the verified flow (waits trimmed)
p5-scroll.mp4.trim.mp4
Recording of the verified flow (waits trimmed)
p16-upgrade3.mp4.trim.mp4
E2E proof — log excerpts
/home/igor_kilocode_ai/.local/share/kwf/sections/add-goal-support-to-the-mobi-fa45/e2e-mobile-app/e1-scene.log/home/igor_kilocode_ai/.local/share/kwf/sections/add-goal-support-to-the-mobi-fa45/e2e-mobile-app/oldprobe11.log/home/igor_kilocode_ai/.local/share/kwf/sections/add-goal-support-to-the-mobi-fa45/e2e-mobile-app/ctrl1.log/home/igor_kilocode_ai/.local/share/kwf/sections/add-goal-support-to-the-mobi-fa45/e2e-mobile-app/p1-scene.log/goal Ship the release: a fixed row appears directly under the session header showing 'Active goal' in the emphasized (primary) style and the objective text; the… — android emulator-5606: a live remote CLI session rendered the fixed goal row directly under the header — 'android.widget.Button Active goal. Goal: Ship the release tappable [0,360][1080,483]' with the transcript immediately beneath at 'User message tappable [0,483][1080,853]' (p8.log) — and the row kept the same [0,360][1080,483] bounds across the swipes and a transcript re-render (p8-scroll.log), with the /goal Ship the release composer step in p8-setup.log; no UX-DEFECT observed in the digest, and the transcript was shorter than the viewport so a scroll gesture moved nothing — the scroll…/goalwith no argument and press Send — the composer visibly indicates an objective must be added (no silent no-op); submitting with…/goal Ship itdoes not send ordinary chat and surfaces the upgrade-required message. — Cloud-agent session on emulator-5612 (android), created via the app's New session (Run on: Cloud Agent, repo iscekic/getel) after e2e/session.sh cloud-enter failed HTTP 401 'Unauthorized resource delegation request'; with the session idle (digest shows the completed turn 'This message isn't a recognized command or task…, Assistant message' and an enabled composer), sending '/goal Ship it' left the draft in the composer (digest: 'android.widget.EditText /goal Ship it tappable [126,2191][800,2311]') and added no user message to the transcript (only 'fake:echo:hello, User message'), so the…Owner request